// 1. v-if和v-show 的区别
// 回答:
// v-if和v-show看起来似乎差不多，当条件不成立时，其所对应的标签元素都不可见，但是这两个选项是有区别的:
// 1、v-if在条件切换时，会对标签进行适当的创建和销毁，而v-show则仅在初始化时加载一次，因此v-if的开销相对来说 会比v-show大。
// 2、v-if是惰性的，只有当条件为真时才会真正渲染标签;如果初始条件不为真，则v-if不会去渲染标签。v-show则无论 初始条件是否成立，都会渲染标签，它仅仅做的只是简单的CSS(display)切换。
// 3、 v-if适用于不需要频繁切换元素显示和隐藏的情况 v-show适用于需要频繁切换元素的显示和隐藏的场景

// 2. computed和watch的区别
// 计算属性computed:
// 1、支持缓存，只有依赖数据发生改变，才会重新进行计算
// 2、不支持异步，当computed内有异步操作时无效，无法监听数据的变化
// 3、如果computed需要对数据修改，需要写get和set两个方法，当数据变化时，调用set方法。
// 4、computed擅长处理的场景:一个数据受多个数据影响，例如购物车计算总价
// 侦听属性watch:
// 1、不支持缓存，数据变，直接会触发相应的操作;
// 2、watch支持异步;监听的函数接收两个参数，第一个参数是最新的值;第二个参数是输入之前的值;
// 3、immediate:组件加载立即触发回调函数执行
// 4、deep:true的意思就是深入监听，任何修改obj里面任何一个属性都会触发这个监听器里的 handler方法来处理逻 辑
// 5、watch擅长处理的场景:一个数据影响多个数据，例如搜索框

// setTimeout 打出0-9的方案

// 1.利用 setTimeout函数 的第三个参数 ,会作为回调函数的第一个参数传入

// for (var i = 0; i < 10; i++) {
//   setTimeout(i => {
//     console.log(i);
//   }, 1000, i)
// }

// 2.利用let 实现   let会声明一个块级作用域

// for (let i = 0; i < 10; i++) {
//   setTimeout(() => {
//     console.log(i);
//   }, 1000)
// }

// 3. 利用函数自执行,构建出块级作用域

// for (var i = 0; i < 10; i++) {
//   (i => {
//     setTimeout(() => {
//       console.log(i);
//     }, 1000)
//   })(i)
// }

// 闭包
// function add (x) {
//   return function (y) {
//     return x + y
//   }
// }
// var add5 = add(5)
// var add10 = add(10)
// console.log(add10(2))

// 一个作用域(函数)可以访问另一个函数内部的局部变量,此时就有闭包产生了

// 优点: 延伸了变量的作用域,闭包的局部变量不会执行完就销毁,,一直存在,因为别的函数还在用着呢.

// 缺点: 如果忘记了这个闭包, 内存不会释放(内存泄漏) 闭包  循环引用
